package top.wu2020.lazy.ws.chat.application;

import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
import org.wu.framework.web.response.Result;
import top.wu2020.lazy.ws.chat.application.command.mail.MailCheckCommand;
import top.wu2020.lazy.ws.chat.application.command.mail.code.records.*;
import top.wu2020.lazy.ws.chat.application.dto.MailCodeRecordsDTO;
import top.wu2020.lazy.ws.chat.domain.model.mail.code.records.MailCodeRecords;

import java.util.List;

/**
 * describe 邮箱验证码记录
 *
 * @author Jia wei Wu
 * @date 2024/05/27 09:30 上午
 * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplication
 **/

public interface MailCodeRecordsApplication {


    /**
     * describe 新增邮箱验证码记录
     *
     * @param mailCodeRecordsStoryCommand 新增邮箱验证码记录
     * @return {@link Result<MailCodeRecords>} 邮箱验证码记录新增后领域对象
     * @author Jia wei Wu
     * @date 2024/05/27 09:30 上午
     **/

    Result<MailCodeRecords> story(MailCodeRecordsStoryCommand mailCodeRecordsStoryCommand);

    /**
     * describe 批量新增邮箱验证码记录
     *
     * @param mailCodeRecordsStoryCommandList 批量新增邮箱验证码记录
     * @return {@link Result<List<MailCodeRecords>>} 邮箱验证码记录新增后领域对象集合
     * @author Jia wei Wu
     * @date 2024/05/27 09:30 上午
     **/

    Result<List<MailCodeRecords>> batchStory(List<MailCodeRecordsStoryCommand> mailCodeRecordsStoryCommandList);

    /**
     * describe 更新邮箱验证码记录
     *
     * @param mailCodeRecordsUpdateCommand 更新邮箱验证码记录
     * @return {@link Result<MailCodeRecords>} 邮箱验证码记录领域对象
     * @author Jia wei Wu
     * @date 2024/05/27 09:30 上午
     **/

    Result<MailCodeRecords> updateOne(MailCodeRecordsUpdateCommand mailCodeRecordsUpdateCommand);

    /**
     * describe 查询单个邮箱验证码记录
     *
     * @param mailCodeRecordsQueryOneCommand 查询单个邮箱验证码记录
     * @return {@link Result<MailCodeRecordsDTO>} 邮箱验证码记录DTO对象
     * @author Jia wei Wu
     * @date 2024/05/27 09:30 上午
     **/

    Result<MailCodeRecordsDTO> findOne(MailCodeRecordsQueryOneCommand mailCodeRecordsQueryOneCommand);

    /**
     * describe 查询多个邮箱验证码记录
     *
     * @param mailCodeRecordsQueryListCommand 查询多个邮箱验证码记录
     * @return {@link Result <List<MailCodeRecordsDTO>>} 邮箱验证码记录DTO对象
     * @author Jia wei Wu
     * @date 2024/05/27 09:30 上午
     **/

    Result<List<MailCodeRecordsDTO>> findList(MailCodeRecordsQueryListCommand mailCodeRecordsQueryListCommand);

    /**
     * describe 分页查询多个邮箱验证码记录
     *
     * @param mailCodeRecordsQueryListCommand 分页查询多个邮箱验证码记录
     * @return {@link Result <LazyPage<MailCodeRecordsDTO>>} 分页邮箱验证码记录DTO对象
     * @author Jia wei Wu
     * @date 2024/05/27 09:30 上午
     **/

    Result<LazyPage<MailCodeRecordsDTO>> findPage(int size, int current, MailCodeRecordsQueryListCommand mailCodeRecordsQueryListCommand);

    /**
     * describe 删除邮箱验证码记录
     *
     * @param mailCodeRecordsRemoveCommand 删除邮箱验证码记录
     * @return {@link Result<MailCodeRecords>} 邮箱验证码记录
     * @author Jia wei Wu
     * @date 2024/05/27 09:30 上午
     **/

    Result<MailCodeRecords> remove(MailCodeRecordsRemoveCommand mailCodeRecordsRemoveCommand);

    /**
     * 邮箱验证码验证
     *
     * @param mailCheckCommand 验证数据
     * @return 返回结果
     */
    Result<?> checkVerificationCode(MailCheckCommand mailCheckCommand);
}